package br.com.ac.fatureweb.model.billing;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.com.ac.fatureweb.integration.billing.ValorVO;
import br.com.ac.fatureweb.model.Roteiro;
import br.com.ac.fatureweb.utilitary.Model;

@Entity
@Table(name = "VALOR")
@SequenceGenerator(name = "SEQ_VALOR", sequenceName = "SEQ_VALOR", allocationSize = 1, initialValue = 1)
public class Valor extends Model {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4201794689645797466L;

	@Id
	@GeneratedValue(generator = "SEQ_VALOR", strategy = GenerationType.SEQUENCE)
	@Column(name = "SEQ")
	private Long seq;

	@Column(name = "ID_TARIFA")
	private Long idTarifa;

	@Column(name = "CATEGORIA")
	private String categoria;

	@Column(name = "FAIXA_INICIAL")
	private Long faixaInicial;

	@Column(name = "FAIXA_FINAL")
	private Long faixaFinal;

	@Column(name = "VALOR")
	private Double valor;

	@Column(name = "VALOR_ANTERIOR")
	private Double valorTarifaAnterior;

	@Column(name = "CONSUMO")
	private Long consumo;

	@Column(name = "INSCRICAO", nullable = false)
	private Long inscricao;

	@Column(name = "ID_CARGA", nullable = false)
	private Long idCarga;

	@Column(name = "QTD_ECONOMIA")
	private Integer qtdEconomia;

	@Column(name = "VALOR_UNITARIO")
	private Double valorUnitario;

	@Column(name = "COD_PRODUTO")
	private Integer codProduto;

	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "ID_ROTEIRO", referencedColumnName = "ID")
	private Roteiro roteiro;

	public Valor() {
		super();
	}

	public Valor(Long seq, Long idTarifa, String categoria, Long faixaInicial,
			Long faixaFinal, Double valor, Double valorTarifaAnterior,
			Long consumo, Long inscricao, Long idCarga, Integer qtdEconomia,
			Double valorUnitario, Integer codProduto, Roteiro roteiro) {
		super();
		this.seq = seq;
		this.idTarifa = idTarifa;
		this.categoria = categoria;
		this.faixaInicial = faixaInicial;
		this.faixaFinal = faixaFinal;
		this.valor = valor;
		this.valorTarifaAnterior = valorTarifaAnterior;
		this.consumo = consumo;
		this.inscricao = inscricao;
		this.idCarga = idCarga;
		this.qtdEconomia = qtdEconomia;
		this.valorUnitario = valorUnitario;
		this.codProduto = codProduto;
		this.roteiro = roteiro;
	}

	public Valor(ValorVO valorVO, Long idRoteiro) {
		super();
		this.idTarifa = valorVO.getIdTarifa();
		this.categoria = valorVO.getCategoria();
		this.faixaInicial = valorVO.getInicio();
		this.faixaFinal = valorVO.getFim();
		this.valor = valorVO.getValor();
		this.valorTarifaAnterior = valorVO.getValorAnterior();
		this.consumo = valorVO.getConsumo();
		this.inscricao = valorVO.getInscricao();
		this.idCarga = valorVO.getIdCarga();
		this.qtdEconomia = valorVO.getQtdEconomia();
		this.valorUnitario = valorVO.getValorUnitario();
		this.codProduto = valorVO.getCodProduto();
		this.roteiro = new Roteiro(idRoteiro);
	}

	/**
	 * @return the roteiro
	 */
	public Roteiro getRoteiro() {
		return roteiro;
	}

	/**
	 * @param roteiro
	 *            the roteiro to set
	 */
	public void setRoteiro(Roteiro roteiro) {
		this.roteiro = roteiro;
	}

	/**
	 * @return the idTarifa
	 */
	public Long getIdTarifa() {
		return idTarifa;
	}

	/**
	 * @param idTarifa
	 *            the idTarifa to set
	 */
	public void setIdTarifa(Long idTarifa) {
		this.idTarifa = idTarifa;
	}

	/**
	 * @return the categoria
	 */
	public String getCategoria() {
		return categoria;
	}

	/**
	 * @param categoria
	 *            the categoria to set
	 */
	public void setCategoria(String categoria) {
		this.categoria = categoria;
	}

	/**
	 * @return the faixaInicial
	 */
	public Long getFaixaInicial() {
		return faixaInicial;
	}

	/**
	 * @param faixaInicial
	 *            the faixaInicial to set
	 */
	public void setFaixaInicial(Long faixaInicial) {
		this.faixaInicial = faixaInicial;
	}

	/**
	 * @return the faixaFinal
	 */
	public Long getFaixaFinal() {
		return faixaFinal;
	}

	/**
	 * @param faixaFinal
	 *            the faixaFinal to set
	 */
	public void setFaixaFinal(Long faixaFinal) {
		this.faixaFinal = faixaFinal;
	}

	/**
	 * @return the valor
	 */
	public Double getValor() {
		return valor;
	}

	/**
	 * @param valor
	 *            the valor to set
	 */
	public void setValor(Double valor) {
		this.valor = valor;
	}

	/**
	 * @return the valorTarifaAnterior
	 */
	public Double getValorTarifaAnterior() {
		return valorTarifaAnterior;
	}

	/**
	 * @param valorTarifaAnterior
	 *            the valorTarifaAnterior to set
	 */
	public void setValorTarifaAnterior(Double valorTarifaAnterior) {
		this.valorTarifaAnterior = valorTarifaAnterior;
	}

	/**
	 * @return the consumo
	 */
	public Long getConsumo() {
		return consumo;
	}

	/**
	 * @param consumo
	 *            the consumo to set
	 */
	public void setConsumo(Long consumo) {
		this.consumo = consumo;
	}

	/**
	 * @return the inscricao
	 */
	public Long getInscricao() {
		return inscricao;
	}

	/**
	 * @param inscricao
	 *            the inscricao to set
	 */
	public void setInscricao(Long inscricao) {
		this.inscricao = inscricao;
	}

	/**
	 * @return the idCarga
	 */
	public Long getIdCarga() {
		return idCarga;
	}

	/**
	 * @param idCarga
	 *            the idCarga to set
	 */
	public void setIdCarga(Long idCarga) {
		this.idCarga = idCarga;
	}

	/**
	 * @return the seq
	 */
	public Long getSeq() {
		return seq;
	}

	/**
	 * @param seq
	 *            the seq to set
	 */
	public void setSeq(Long seq) {
		this.seq = seq;
	}

	/**
	 * @return the qtdEconomia
	 */
	public Integer getQtdEconomia() {
		return qtdEconomia;
	}

	/**
	 * @param qtdEconomia
	 *            the qtdEconomia to set
	 */
	public void setQtdEconomia(Integer qtdEconomia) {
		this.qtdEconomia = qtdEconomia;
	}

	/**
	 * @return the valorUnitario
	 */
	public Double getValorUnitario() {
		return valorUnitario;
	}

	/**
	 * @param valorUnitario
	 *            the valorUnitario to set
	 */
	public void setValorUnitario(Double valorUnitario) {
		this.valorUnitario = valorUnitario;
	}

	/**
	 * @return the codProduto
	 */
	public Integer getCodProduto() {
		return codProduto;
	}

	/**
	 * @param codProduto
	 *            the codProduto to set
	 */
	public void setCodProduto(Integer codProduto) {
		this.codProduto = codProduto;
	}

}
